package dingding

import "strings"

type GetUserTokenRequest struct {
	ClientId     string `json:"clientId"`
	ClientSecret string `json:"clientSecret"`
	Code         string `json:"code"`
	RefreshToken string `json:"refreshToken"`
	GrantType    string `json:"grantType"`
}

func NewDingDingAccessToken() *DingDingAccessToken {
	return &DingDingAccessToken{}
}

//	{
//		"accessToken" : "abcd",
//		"refreshToken" : "abcd",
//		"expireIn" : 7200,
//		"corpId" : "corpxxxx"
//	  }
type DingDingAccessToken struct {
	// 生成的accessToken
	AccessToken string `json:"accessToken"`
	// 生成的refresh_token。可以使用此刷新token，定期的获取用户的accessToken
	RefreshToken string `json:"refreshToken"`
	// 超时时间，单位秒。
	ExpiresIn int64 `json:"expireIn"`
	// 所选企业corpId。
	CorpId string `json:"corpId"`
	// access_token 颁发时间 <额外记录信息, 用于判断Token是否过期>
	IssueAt int64 `json:"issue_at"`
}

func NewUser() *User {
	return &User{}
}

//	{
//		"nick" : "zhangsan",
//		"avatarUrl" : "https://xxx",
//		"mobile" : "150xxxx9144",
//		"openId" : "123",
//		"unionId" : "z21HjQliSzpw0Yxxxx",
//		"email" : "zhangsan@alibaba-inc.com",
//		"stateCode" : "86"
//	  }
type User struct {
	// 用户的钉钉昵称
	Nick string `json:"nick"`
	// 头像URL
	AvatarUrl string `json:"avatarUrl"`
	// 用户的手机号 如果要获取用户手机号，需要在开发者后台申请个人手机号信息权限
	Mobile string `json:"mobile"`
	// 用户的openId
	OpenId string `json:"openId"`
	// 用户的unionId
	UnionId string `json:"unionId"`
	// 用户的个人邮箱
	Email string `json:"email"`
	// 手机号对应的国家号
	StateCode string `json:"手机号对应的国家号"`
}

func (u *User) Username() string {
	if u.Email != "" {
		ud := strings.Split(u.Email, "@")
		if len(ud) == 2 {
			return ud[1]
		}
	}

	if u.Mobile != "" {
		return u.Mobile
	}

	return u.Nick
}
